package com.zyj.core.sqlsource;

import java.util.List;

/**
 * 只是用来存储DynamicSqlSource和RawSqlSource解析之后的结果
 */
public class StaticSqlSource implements SqlSource {

    /**
     * 解析之后的sql和参数映射先交给StaticSqlSource持有，后续通过getBoundSql方法再交给BoundSql
     */

    // 解析之后得到的sql
    private String sql;

    // sql的参数映射  ParameterMapping中保存的是由封装#{}解析出来的参数名称和参数类型，若当前sql没有#{}，则该集合为空
    private List<ParameterMapping> parameterMappings;

    public StaticSqlSource(String sql, List<ParameterMapping> parameterMappings) {
        this.sql = sql;
        this.parameterMappings = parameterMappings;
    }

    /**
     * 在StaticSqlSource中的getBoundSql方法，其实仅仅只是根据【解析完成的sql】以及【参数映射关系】完成了BoundSql对象的封装
     *
     * @param param 为了解析${}需要的参数
     * @return
     */
    @Override
    public BoundSql getBoundSql(Object param) {
        // 封装BoundSql对象
        return new BoundSql(sql, parameterMappings);
    }
}
